package com.adk.backend.service;

import com.adk.backend.common.PageResult;
import com.adk.backend.entity.LxBlCost;
import com.adk.backend.entity.LxBlDetails;
import com.adk.backend.entity.LxBlList;

import java.util.List;
import java.util.Map;

/**
 * 提单服务接口
 */
public interface BlService {
    
    /**
     * 分页查询提单列表
     */
    PageResult<Map<String, Object>> getBlList(Map<String, Object> params);
    
    /**
     * 根据ID查询提单详情
     */
    LxBlList getBlById(Integer id);
    
    /**
     * 根据提单号查询提单
     */
    LxBlList getBlByBlNo(String blNo);
    
    /**
     * 创建提单
     */
    LxBlList createBl(LxBlList blList, Integer userId);

    /**
     * 更新提单
     */
    boolean updateBl(LxBlList blList, Integer userId);
    
    /**
     * 删除提单
     */
    boolean deleteBl(Integer id);
    
    /**
     * 获取提单明细列表
     */
    List<LxBlDetails> getBlDetails(Integer blId);
    
    /**
     * 获取提单成本列表
     */
    List<LxBlCost> getBlCosts(Integer blId);
    
    /**
     * 添加提单成本
     */
    boolean addBlCost(LxBlCost blCost);
    
    /**
     * 更新提单成本
     */
    boolean updateBlCost(LxBlCost blCost);
    
    /**
     * 删除提单成本
     */
    boolean deleteBlCost(Long id);
    
    /**
     * 获取提单明细列表（包含订单信息）
     */
    List<Map<String, Object>> getBlDetailsWithOrder(Integer blId);
    
    /**
     * 获取HLL费用信息
     */
    Map<String, Object> getHllFee(Integer id);
    
    /**
     * 保存HLL费用
     */
    boolean saveHllFee(Integer id, java.math.BigDecimal hllFee, Integer userId);

    /**
     * 获取Manifest费用信息
     */
    Map<String, Object> getManifestFee(Integer id);

    /**
     * 保存Manifest费用
     */
    boolean saveManifestFee(Integer id, java.math.BigDecimal mainfestFee, Integer userId);

    /**
     * 获取中港信息
     */
    Map<String, Object> getZgInfo(Integer id);

    /**
     * 保存中港信息
     */
    boolean saveZgInfo(Integer id, String zgBlNo, Integer vndZgId, Integer userId);

    /**
     * 获取头程公司信息
     */
    Map<String, Object> getTxInfo(Integer id);

    /**
     * 保存头程公司信息
     */
    boolean saveTxInfo(Integer id, Integer vndTxId, Integer userId);
    
    /**
     * 保存提单成本（批量保存）
     */
    boolean saveBlCosts(Integer id, List<LxBlCost> blCosts, Integer userId);
    
    /**
     * 更新提单成本
     */
    boolean updateBlCost(LxBlCost blCost, Integer userId);
}

